
export default class Utils{

    currying(cb,arr=[]){
        let that = this;
        return function fn(...args){  
            let arrs = [...arr,...args];
            if(arrs.length<cb.length){ //函数名.length 就是函数声明时参数的个数
                return that.currying.call(that,cb,arrs);
            }else{
                return cb(...arrs);
            }
        }
    }

    uncurrying(fn) {
        return function () {
            return Function.prototype.call.apply(fn, arguments);
            // 1、call函数（是apply的原函数）的this是fn;  
            //变成了：fn.call(arguments); //此处的arguments就是匿名函数的参数，此参数来自于下面调用push时传入的传参。
            //  变成了：fn.call(push里的arguments,100);
            // 最终表达的意思就是： push的arguments.fn(100);
        }
    }
    
}